package cn.cuilan.utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * Token处理类
 *
 * @author zhang.yan
 */
public class TokenHandler {

    /**
     * HS512加密key
     */
    private final static String HS512_KEY = "cuilan123";

    /**
     * 生成token
     *
     * @param userId   用户id
     * @param userName 用户名称
     * @param password 用户密码
     * @return token
     */
    public static String createToken(Long userId, String userName, String password) {
        String preToken = userId + "==" + userName + "==" + password + "==" + System.currentTimeMillis();
        // TODO 将token放入redis
        return Jwts.builder().setSubject(preToken).signWith(SignatureAlgorithm.HS512, HS512_KEY).compact();
    }

    /**
     * token解密
     *
     * @param token token
     * @return token中包含的json对象
     */
    public static JSONObject parseToken(String token) throws Exception {
        String parseToken = Jwts.parser().setSigningKey(HS512_KEY).parseClaimsJws(token).getBody().getSubject();
        String[] userInfo = parseToken.split("==");
        JSONObject json = new JSONObject();
        json.put("userId", Long.parseLong(userInfo[0]));
        json.put("userName", userInfo[1]);
        json.put("password", userInfo[2]);
        json.put("time", userInfo[3]);
        return json;
    }

}
